/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tarifador.view;

import br.com.tarifador.controller.EmpresaRN;
import br.com.tarifador.model.Empresa;
import br.com.tarifador.dataModel.EmpresaTableModel;
import br.com.tarifador.model.Localidades;
import br.com.tarifador.util.ManipulaLocalidades;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.hibernate.HibernateException;
import org.jboss.logging.Logger;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

/**
 *
 * @author charles
 */
@ManagedBean
@SessionScoped
public class EmpresaBean {

    private EmpresaRN empresaRN = new EmpresaRN();
    private EmpresaTableModel empresaModel;
    private Empresa empresaSelected;
    private List<Empresa> lista;

    public void salvarEmpresa() {
        boolean salvar = false;
        try {
            salvar = empresaRN.salvarEmpresa();

        } catch (HibernateException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar o banco de dados " + e.getMessage(), ""));
        } catch (Throwable e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados!" + e.getMessage(), ""));
        }
        if (salvar == false) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar dados em brancos!", ""));
        } else {
            listaEmpresa();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_INFO, "Operacao relizada com sucesso!!", ""));
        }
    }

    public void listaEmpresa() {
        lista = new ArrayList<Empresa>();
        try {
            lista = empresaRN.carregaListaEmpresa();

        } catch (HibernateException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao consultar o banco de dados", ""));
        } catch (Throwable e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados!", ""));
        }
        this.empresaModel = new EmpresaTableModel(lista);

    }

    public void alteraEmpresa() {
        boolean valida = false;
        try {
            valida = empresaRN.updateEmpresa(empresaSelected);

        } catch (HibernateException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao consultar o banco de dados " + e.getMessage(), ""));
        } catch (Throwable e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados! " + e.getMessage(), ""));
        }
        if (valida == false) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar dados em brancos!", ""));
        } else {
            listaEmpresa();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_INFO, "Operacao relizada com sucesso!!", ""));

        }
    }

    public void deleteEmpresa() {
        boolean valida = false;
        try {
            valida = empresaRN.deletaEmpresa(empresaSelected.getId());
        } catch (HibernateException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados!\n " + e.getMessage(), ""));
        } catch (Throwable e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar os dados!\n " + e.getMessage(), ""));
        }
        if (valida == false) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar dados em brancos!", ""));
        } else {
            listaEmpresa();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_INFO, "Operacao relizada com sucesso!!", ""));
        }
    }

    public void btnAlterarEmpresa() {
        RequestContext request = RequestContext.getCurrentInstance();
        try {
            if (empresaSelected.getId() != null && empresaSelected.getId() > 0) {
                request.addCallbackParam("sucesso", true);
            } else {
                request.addCallbackParam("sucesso", false);
            }
        } catch (NullPointerException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_FATAL, "Selecione um campo!", ""));
        }
    }

    public void limpaLista() {
        if (empresaModel != null) {
            lista.clear();
            empresaModel = new EmpresaTableModel(lista);
        }
    }

    public void oncompleteSelect(SelectEvent event) {
        Localidades localidades = (Localidades) event.getObject();
        Logger.getLogger(EmpresaBean.class.getName()).log(Logger.Level.INFO,"Selectec"+ localidades.toString());
        empresaRN.setLocalidades(new ManipulaLocalidades().manipulaAspas(localidades));
    }

    public List<Localidades> oncompleteCep(String cep) {
        Logger.getLogger(EmpresaBean.class.getName()).log(Logger.Level.INFO, "Carregando o cep: " + cep);
        List<Localidades> lista = null;
        if (cep.trim().length() < 8) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("null", new FacesMessage(FacesMessage.SEVERITY_WARN, "Cep não localizado digite novamente!", ""));
        } else {
            lista = empresaRN.oncompleteCep(cep);
       Logger.getLogger(EmpresaBean.class.getName()).log(Logger.Level.INFO, "lista de cep: " + lista.toString());
           return lista;
        }
        return null;

    }

    //Geters and seters
    public EmpresaRN getEmpresaRN() {
        return empresaRN;
    }

    public void setEmpresaRN(EmpresaRN empresaRN) {
        this.empresaRN = empresaRN;
    }

    public EmpresaTableModel getEmpresaModel() {
        return empresaModel;
    }

    public void setEmpresaModel(EmpresaTableModel empresaModel) {
        this.empresaModel = empresaModel;
    }

    public Empresa getEmpresaSelected() {
        return empresaSelected;
    }

    public void setEmpresaSelected(Empresa empresaSelected) {
        this.empresaSelected = empresaSelected;
    }

    public List<Empresa> getLista() {
        return lista;
    }

    public void setLista(List<Empresa> lista) {
        this.lista = lista;
    }
}
